package com.xzcedu.mhl.service;

import com.xzcedu.mhl.dao.DiningTableDAO;
import com.xzcedu.mhl.domain.DiningTable;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 徐州城
 * @version 1.0
 */
public class DiningTableService { //业务层

    //定义一个DiningTableDAO对象
    private DiningTableDAO diningTableDAO = new DiningTableDAO();

    //需要返回所有餐桌的信息
    public List<DiningTable> list(){
        return diningTableDAO.queryMultiply("select id, state from diningTable", DiningTable.class);
    }

    //构成方法重载
    public void listChange(){ //直接在这里输出id 和 状态，不用返回去
        List<DiningTable> diningTables = diningTableDAO.queryMultiply("select id, state from diningTable", DiningTable.class);
        //显示 MHLView端的餐桌信息
        System.out.println("\n餐桌编号\t\t餐桌状态");
        //遍历集合
        for (DiningTable dt : diningTables) {
            System.out.println(dt.getId() + "\t\t\t" + dt.getState());
        }
        System.out.println("=============显示完毕=============\n");
    }

    //根据id，查询对应餐桌DiningTable 对象，如果返回null，
    //就代表对应餐桌不存在
    public DiningTable getDiningTableById(int id){
        //小提示: 把sql语句放在查询分析器去测试一下，防止sql语句出错
        return diningTableDAO.querySingle("select state from diningTable where id = ?",DiningTable.class,id);
    }

    //得到所有可以预定的餐桌，即id对应餐桌状态为"空"
    public List<Integer> getDiningTableAllAvailableId(){
        //创建集合
        List<Integer> list = new ArrayList<>();
        //拿到 resultSet结果集
        List<DiningTable> diningTables = diningTableDAO.queryMultiply("select * from diningTable", DiningTable.class);
        //遍历集合
        for (DiningTable diningTable : diningTables) {
            //如果餐桌的状态为空，那么代表此时餐桌为可用
            if ("空".equals(diningTable.getState())) {
                //加入集合
                list.add(diningTable.getId());
            }
        }
        return list;
    }

    //如果餐桌可以预定，调用方法，对其状态进行更新(包括预定人的名字和电话)
    public boolean orderDiningTable(int id, String orderName, String orderTel){
        int update =
                diningTableDAO.update("update diningTable set state='已预定',orderName=?,orderTel=? where id=?", orderName, orderTel, id);

        return update > 0; //如果大于0 代表更新成功
    }

    //需要提供一个更新 餐桌状态的方法
    public boolean updateDiningTableState(int id, String state){

        int update = diningTableDAO.update("update diningTable set state=? where id=?", state, id);
        return update > 0;
    }

    //提供方法，将指定的餐桌状态设置为空闲状态
    public boolean updateDiningTableToState(int id, String state){

        int update = diningTableDAO.update("update diningTable set state=?,orderName='',orderTel='' where id=?", state, id);
        return update > 0;
    }
}
